package com.cmc.cloud.cmclink.doc.service;

import java.util.*;
import javax.validation.*;

import com.cmc.cloud.cmclink.doc.dto.RecordStatusDto;
import com.cmc.cloud.cmclink.doc.vo.tblisustampfiles.TblisustampApproveCancelVO;
import com.cmc.cloud.cmclink.doc.vo.tblisustampfiles.TblisustampCreateApprovalVO;
import com.cmc.cloud.cmclink.doc.vo.tblisustampfiles.TblisustampFilesApproveRespVO;
import com.cmc.cloud.cmclink.doc.vo.tblisustampfiles.TblisustampFilesCreateReqVO;
import com.cmc.cloud.cmclink.doc.vo.tblisustampfiles.TblisustampFilesPageReqVO;
import com.cmc.cloud.cmclink.doc.vo.tblisustampfiles.TblisustampFilesUpdateReqVO;
import com.cmc.cloud.cmclink.doc.entity.TblisustampFilesDO;
import com.cmes.framework.common.pojo.PageResult;

/**
 * 申请明细信息 Service 接口
 *
 * @author 集运管理员
 */
public interface TblisustampFilesService {

    /**
     * 创建申请明细信息
     *
     * @param createReqVO 创建信息
     */
    void createTblisustampFiles(@Valid TblisustampFilesCreateReqVO createReqVO);

    /**
     * 更新申请明细信息
     *
     * @param updateReqVO 更新信息
     */
    void updateTblisustampFiles(@Valid TblisustampFilesUpdateReqVO updateReqVO);

    /**
     * 删除申请明细信息
     *
     * @param id 编号
     */
    void deleteTblisustampFiles(Long id);

    /**
     * 获得申请明细信息
     *
     * @param id 编号
     * @return 申请明细信息
     */
    TblisustampFilesDO getTblisustampFiles(Long id);

    /**
     * 获得审批人需审批的明细信息
     *
     * @param id 编号
     * @return 申请明细信息
     */
    TblisustampFilesApproveRespVO getTblisustampApproveFiles(Long id);

    /**
     * 获得申请明细信息列表
     *
     * @param ids 编号
     * @return 申请明细信息列表
     */
    List<TblisustampFilesDO> getTblisustampFilesList(Collection<Long> ids);

    /**
     * 获得申请明细信息
     *
     * @param id   主信息ID
     * @return 申请明细信息
     */
    List<TblisustampFilesDO> getListByMainId(Long id);

    /**
     * 获得申请明细信息分页
     *
     * @param pageReqVO 分页查询
     * @return 申请明细信息分页
     */
    PageResult<TblisustampFilesDO> getTblisustampFilesPage(TblisustampFilesPageReqVO pageReqVO);


    /**
     * 对申请明细进行 提交 审核等操作
     *
     * @param recordStatusDto 操作类型
     * @throws Exception 业务异常
     */
    void commitOrCancelApprove(RecordStatusDto recordStatusDto) throws Exception;


    /**
     * 创建审批
     * @param req
     */
    //void createApproval(TblisustampCreateApprovalVO req);

    /**
     * 取消流程实例
     * @param req
     */
    //void cancelProcessInstance(TblisustampApproveCancelVO req);

    /**
     * 更新流转状态
     * @param id
     * @param status
     */
    void updateLeaveStatus(long id, Integer status);
}
